// controlpanel.h
#ifndef CONTROLPANEL_H
#define CONTROLPANEL_H

#include <QWidget>
#include <QVBoxLayout>
#include <QTreeWidget>
#include <QLineEdit>
#include <QLabel>
#include <QMap>
#include <QDebug>
#include <QMimeData>
#include <QDrag>


class MyDeviceTree : public QTreeWidget {
    Q_OBJECT
public:
    explicit MyDeviceTree(QWidget *parent = nullptr) : QTreeWidget(parent) {
        setDragEnabled(true); // 启用拖拽
        setSelectionMode(QAbstractItemView::SingleSelection);
    }

protected:
    void startDrag(Qt::DropActions supportedActions) override {

        qDebug() << "startDrag";

         QString rtmpUrl = currentItem()->data(0, Qt::UserRole).toString();

        qDebug() << rtmpUrl << "`````````````````````2e3r24t5678";

        // 获取当前选中的项
        QList<QTreeWidgetItem*> selectedItems = this->selectedItems();
        if (selectedItems.isEmpty()) return;

        QTreeWidgetItem* item = selectedItems.first();
        // 假设你把 RTMP URL 存在了 item 的某个列（比如第6列，索引5）或者作为 UserRole 数据
        // QString rtmpUrl = item->text(5); // 从列获取
        QStringList deviceInfo = item->data(0, Qt::UserRole + 1).toStringList(); // 从之前代码看是这样存的
       // QString rtmpUrl = deviceInfo.value(6, ""); // 获取 RTMP URL (索引6)
        QString deviceId = deviceInfo.value(0, ""); // 获取设备ID (索引0)

        if (rtmpUrl.isEmpty()) {
            // 如果没有 RTMP，尝试 RTSP 或其他方式，或直接用 ID 让服务器查
            // QString rtspUrl = deviceInfo.value(5, "");
            // rtmpUrl = rtspUrl; // 或者用一个标记表明是设备ID
            // 为了简化，我们假设用 deviceId，让接收端去查或请求服务器

            qDebug() << rtmpUrl << "------11111111111111111";

            rtmpUrl = deviceId; // 用设备ID代替URL进行传输
        }

        if (!rtmpUrl.isEmpty()) {

            qDebug() << rtmpUrl << "------122222";




            QMimeData *mimeData = new QMimeData;
            // 设置文本数据 (最简单的)
            mimeData->setText(rtmpUrl);
            // 或者设置自定义数据
            // mimeData->setData("application/x-smarthome-device-url", rtmpUrl.toUtf8());
            // mimeData->setData("application/x-smarthome-device-id", deviceId.toUtf8());

            QDrag *drag = new QDrag(this);
            drag->setMimeData(mimeData);
            // 可以设置拖拽图标
            // drag->setPixmap(...);
            // drag->setHotSpot(...);

            // 启动拖拽操作
            drag->exec(Qt::MoveAction);
        }
    }
};


















class ControlPanel : public QWidget
{
    Q_OBJECT

public:
    explicit ControlPanel(QWidget *parent = nullptr);
    ~ControlPanel();

    // 获取设备树控件用于后续操作
    QTreeWidget* getDeviceTree() const;

    // 设置设备列表数据（可由外部调用）
    void setDeviceList(const QString& deviceListJson);
    
    // 获取当前选中的设备
    QString getSelectedDevice() const;
    
    // 获取当前选中的流类型
    QString getSelectedStreamType() const;
    
    // 设置搜索框的文本
    void setSearchText(const QString &text);
    
    // 获取搜索框的文本
    QString getSearchText() const;

private:
    MyDeviceTree *deviceTree;
    QLineEdit *searchEdit;
    QLabel *titleLabel;
    QTreeWidgetItem *ballMachineItem;
    QTreeWidgetItem *gunCameraItem;

    QVBoxLayout *mainLayout;
    
    // 初始化默认设备分组
    void initDefaultDeviceGroups();
    
    // 初始化设备树的拖拽功能
    void initDeviceTreeDrag();

private slots:

    // 设备树项被点击时触发
    // 参数: item - 被点击的树节点
    // 参数: column - 被点击的列
    void onDeviceItemClicked(QTreeWidgetItem *item, int column);
    
    // 设备树项展开时触发
    void onItemExpanded(QTreeWidgetItem *item);

signals:
    // 通知主窗口：设备被选中
    // 参数: deviceId - 设备ID
    // 参数: streamType - 流类型（主码流/子码流）
    void deviceSelected(const QString &deviceId, const QString &streamType);

    void dragVideoStream(const QString& rtmpUrl);

    // 请求刷新设备列表
    void requestRefreshDeviceList();
};

#endif // CONTROLPANEL_H
